package cn.iocoder.yudao.module.book.service.audio;

import javax.validation.Valid;
import java.util.List;
import cn.iocoder.yudao.module.book.controller.admin.audio.vo.*;
import cn.iocoder.yudao.module.book.controller.app.eargrinding.vo.AppAudioRespVO;
import cn.iocoder.yudao.module.book.dal.dataobject.audio.AudioDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 音频 Service 接口
 *
 * @author xi
 */
public interface AudioService {

    /**
     * 创建音频
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createAudio(@Valid AudioSaveReqVO createReqVO);

    /**
     * 更新音频
     *
     * @param updateReqVO 更新信息
     */
    void updateAudio(@Valid AudioSaveReqVO updateReqVO);

    /**
     * 删除音频
     *
     * @param id 编号
     */
    void deleteAudio(Integer id);

    /**
     * 获得音频
     *
     * @param id 编号
     * @return 音频
     */
    AudioDO getAudio(Integer id);

    /**
     * 获得音频分页
     *
     * @param pageReqVO 分页查询
     * @return 音频分页
     */
    PageResult<AudioDO> getAudioPage(AudioPageReqVO pageReqVO);


    List<AppAudioRespVO> getRecentAudio(Long userId);

    // 保存录音：任选其一
    void saveRecording(Long bookId, Integer page, String fileUrl);
    void saveRecordingData(Long bookId, Integer page, byte[] data, String contentType);

    AudioDO getLatestRecording(Long userId, Long bookId, Integer page);


    /**
     * 播放音频（记录播放行为）
     *
     * @param bookId 书籍ID
     * @param userId 用户ID
     * @return 音频信息
     */
    AppAudioRespVO playAudio(Integer bookId, Long userId);

    /**
     * 获取指定页面的音频
     *
     * @param bookId 书籍ID
     * @param imageId 图片ID
     * @param userId 用户ID
     * @return 音频信息
     */
    AppAudioRespVO playPageAudio(Integer bookId, Integer imageId, Long userId);

    /**
     * 查询用户录音过的书本ID列表
     */
    List<Long> listMyRecordedBookIds(Long userId);
}